// 常见误区：使用 TS 编写框架，就等价于对 TS 类型支持友好，其实这是两件完全不同的事
// 这里并不知道这里的 val的最终类型
// const foo = (val: any) => val
// // 使用的时候会出现了 any
// const res = foo(1)

// // 解决的方式是
const foo = <T extends any>(val: T) => val
const res = foo(1)
/**
 * 通过这个简单的例子我们认识到，使用 TS编写代码与对 TS类型支持友好是两件事。
 * 在编写大型框架时，想要做到完善的 TS类型支持很不容易，
 * 大家可以査看Vue.is源码中的runtime-coresrc/apiDefineComponent.ts 文件，
 * 整个文件里真正会在浏览器中运行的代码其实只有1行，但是全部的代码接近 200行，
 * 其实这些代码都是在为类型支持服务。由此可见，框架想要做到完善的类型支持，
 * 需要付出相当大的努力。
   除了要花大力气做类型推导，从而做到更好的类型支持外，还要考虑对TSX的支持，
   后续章节会详细讨论这部分内容。
 */
